# teste snake_v2

# testa verificar_colisao_cenario()

import pygame,os,random
from pygame.locals import *
from Cenario import *
from Fase import *
from Snake_v2 import *
from Comida import *

from Persistencia import *
import Tkinter
import tkMessageBox
import tkSimpleDialog
from Tkinter import *

pygame.init()

screen = pygame.display.set_mode((600,600))
pygame.display.set_caption('Hipersnake - Cristimas Snake')

comida1 = Comida('Presente')
comida2 = Comida('Bengala')
comida3 = Comida('Estrela')

cenario1 = Cenario('Cenario fase1')
cenario2 = Cenario('Cenario fase2')
cenario3 = Cenario('Cenario fase3')
cenario4 = Cenario('Cenario fase4')

fase1 = Fase('Fase1',cenario1)
fase2 = Fase('Fase2',cenario2)
fase3 = Fase('Fase3',cenario3)
fase4 = Fase('Fase4',cenario4)

snake = Snake_v2()

dirs = 0
score = 0
clock = pygame.time.Clock()
fonte = pygame.font.SysFont('Arial',40)

recordes = Persistencia(score)

while True:
    for e in pygame.event.get():   # para a cobra se mexer
        if e.type == QUIT:
            sys.exit(0)
        elif e.type == KEYDOWN:     # dirs eh uma variavel que orienta o movimento da cobra, coerentemente
            if e.key == K_UP and dirs != 0:   # dirs representa numericamente a direcao do movimento da cobra
                dirs = 2
            elif e.key == K_DOWN and dirs != 2:
                dirs = 0
            elif e.key == K_LEFT and dirs != 1:
                dirs = 3
            elif e.key == K_RIGHT and dirs != 3:
                dirs = 1

    i = len(snake.xs)-1
    while i >= 2:
        if snake.colidir(snake.xs[0],snake.xs[i], snake.ys[0], snake.ys[i], 20, 20, 20, 20):   # se bater no proprio corpo
            snake.morrer(screen,score,recordes)
            print 'Colidiu com o proprio corpo'
            dirs = 0
        i -= 1


    if score <= 5:
        fase1.blitar_cenario_fase(cenario1)
        fase1.mudar_clock(4)

        if score == 0:
            screen.blit(fonte.render('FASE 1',True, (255,0,0)),(200,10))

        if snake.verificar_colisao_comida(comida1):
            score += 1
            snake.xs.append(700)    # faz a cobra crescer, adiciona uma 'casa' no final de cada lista que descreve o movimento da cobra
            snake.ys.append(700)    # para entao substituir esse 700 por uma surface blitada na posicao final da cobra
            print snake.xs
            print snake.ys
            print 'Bateu na comida'
            comida1.escolher_posicao(cenario1)
            print 'Apareceu nova comida'

        comida1.aparecer_imagem_comida_123(cenario1)

        if snake.verificar_colisao_cenario(cenario1):
            snake.morrer(screen,score,recordes)
            dirs = 0
            print 'Bateu no cenario'
        
        if score == 5:
            screen.blit(fonte.render('FASE 2',True, (255,0,0)),(200,10))
        
    elif 5 < score <= 10:
        fase2.blitar_cenario_fase(cenario2)
        fase2.mudar_clock(5)

        if snake.verificar_colisao_comida(comida2):
            score += 1
            snake.xs.append(700)    # faz a cobra crescer, adiciona uma 'casa' no final de cada lista que descreve o movimento da cobra
            snake.ys.append(700)    # para entao substituir esse 700 por uma surface blitada na posicao final da cobra
            print snake.xs
            print snake.ys
            print 'Bateu na comida'
            comida2.escolher_posicao(cenario2)
            print 'Apareceu nova comida'

        comida2.aparecer_imagem_comida_123(cenario2)

        if snake.verificar_colisao_cenario(cenario2):
            snake.morrer(screen,score,recordes)
            dirs = 0
            print 'Bateu no cenario'
        
        if score == 10:
            screen.blit(fonte.render('FASE 3',True, (255,0,0)),(200,10))
      
    elif 10 < score <= 15:
        fase3.blitar_cenario_fase(cenario3)
        fase3.mudar_clock(5)

        if snake.verificar_colisao_comida(comida3):
            score += 1
            snake.xs.append(700)    # faz a cobra crescer, adiciona uma 'casa' no final de cada lista que descreve o movimento da cobra
            snake.ys.append(700)    # para entao substituir esse 700 por uma surface blitada na posicao final da cobra
            print snake.xs
            print snake.ys
            print 'Bateu na comida'
            comida3.escolher_posicao(cenario3)
            print 'Apareceu nova comida'

        comida3.aparecer_imagem_comida_123(cenario3)

        if snake.verificar_colisao_cenario(cenario3):
            snake.morrer(screen,score,recordes)
            dirs = 0
            print 'Bateu no cenario'
        
        if score == 15:
            screen.blit(fonte.render('FASE 4',True, (255,0,0)),(200,10))


    elif score > 15:
        fase4.blitar_cenario_fase(cenario4)
        fase4.mudar_clock(5)

        if snake.verificar_colisao_comida(comida4):
            score += 1
            snake.xs.append(700)    # faz a cobra crescer, adiciona uma 'casa' no final de cada lista que descreve o movimento da cobra
            snake.ys.append(700)    # para entao substituir esse 700 por uma surface blitada na posicao final da cobra
            print snake.xs
            print snake.ys
            print 'Bateu na comida'
            comida4.escolher_posicao(cenario3)
            print 'Apareceu nova comida'

        comida4.aparecer_imagem_comida_4(cenario4)

        if snake.verificar_colisao_cenario(cenario4):
            snake.morrer(screen,score,recordes)
            dirs = 0
            print 'Bateu no cenario'
        


    if snake.xs[0] < 0 or snake.xs[0] > 580 or snake.ys[0] < 0 or snake.ys[0] > 580:    # se bater nas extremidades da tela
        print 'Bateu nas extremidades da tela - morreu'
        snake.morrer(screen,score,recordes)
        dirs = 0   # estah descendo em y, para nao dah bug, quando renascer



    i = len(snake.xs)-1    # para comecar pegando o ultimo elemento da lista
    while i >= 1:
        snake.xs[i] = snake.xs[i-1]
        snake.ys[i] = snake.ys[i-1]
        i -= 1
    if dirs == 0:       # no comeco do jogo, a cobra estah descendo (y aumenta)
        snake.ys[0] += 20
    elif dirs == 1:
        snake.xs[0] += 20
    elif dirs == 2:
        snake.ys[0] -= 20
    elif dirs == 3:
        snake.xs[0] -= 20

    for i in range(len(snake.xs)-1):    # blitando as imagens da cobra
        screen.blit(snake.aparecer_imagem_cobra(),(snake.xs[i],snake.ys[i]))
        print 'Blitou imagem cobra'


    t = fonte.render('SCORE: %s' % str(score),True,(255,0,0))  # para quando morrer aparecer o score no final

    screen.blit(t,(10,10))

    pygame.display.update()
